package org.upm;

/**
* Hebra que atiende las peticiones realizadas por el SipServlet
* @author Jonathan Gonzalez
* @version 30/10/2008
*/

import java.io.FileReader;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.util.logging.Logger;
import java.util.ArrayList;
import java.util.StringTokenizer;

import au.com.bytecode.opencsv.CSVReader;

public class DroolsThread extends Thread{
	
    //Logger de la clase.
    private static Logger logger =
           Logger.getLogger(DroolsThread.class.getName());
	
	//Datos a devolver al Servlet
	private byte[] data = null;
	
    //Datagram socket de la conexion
    private DatagramSocket dsocket;
    
    //Solicitud recibida del cliente
    private DatagramPacket solicitud;
    
    /**
     * Contructor de la clase 
     * 
     * @param dsocket - socket de la conexión
     * @param solicitud - solicitud recibida del cliente
     * @param ca - Clasificador de Anuncios
     * @param p - Usuarios registrados en el sistema
     * @param anuncios - Anuncios registrados en el sistema.
     */
    public DroolsThread(DatagramSocket dsocket, DatagramPacket solicitud){
    	this.solicitud = solicitud;
    	this.dsocket = dsocket;
    }
    
    /**
     * Ejecucion del cuerpo de la hebra
     */
      @Override
      public void run(){
    	  try{
        	  //Extraemos la solicitud
    	      Poblacion poblacion = new Poblacion();
        	  data = solicitud.getData();
        	  String peticion = new String(data);
        	  StringTokenizer st = new StringTokenizer(peticion,".");
        	  int hora = Integer.parseInt(st.nextToken());
        	  Usuario llamante = poblacion.dameUsuario(st.nextToken());
        	  Usuario destinatario = poblacion.dameUsuario(st.nextToken());
        	  int duracion = Integer.parseInt(st.nextToken());
  
        	  Llamada llamada = new Llamada(hora, llamante, destinatario, duracion);
  	          //Establecemos el numero favorito
  	          if(llamante.getNombre().equals("Pedro")){
  	            	Usuario favorito = poblacion.dameUsuario("Manuel");
  	            	llamante.setFavorito(favorito);
  	           }
  	            //Generamos la factura y la enviamos al cliente
  	            GeneradorRecibo gr = new GeneradorRecibo();
  	            Factura factura = gr.generaRecibo(llamante, llamada);
  	            String datos = null;
  	            if(factura.getLlamadasMovistar() != 0){
  	            	datos = "Movistar." + factura.getSegundosMovistar() + "." + factura.getPrecio() + ".";
  	            }else if(factura.getLlamadasVodafone() != 0){
  	            	datos = "Vodafone." + factura.getSegundosVodafone() + "." + factura.getPrecio() + ".";
  	            }else if(factura.getLlamadasOrange() != 0){
  	            	datos = "Orange." + factura.getSegundosOrange() + "." + factura.getPrecio() + ".";
  	            }else if(factura.getLlamadasYoigo() != 0){
  	            	datos = "Yoigo." + factura.getSegundosYoigo() + "." + factura.getPrecio() + ".";
  	            }
  	            logger.info(datos);
            
  	          byte[] respuesta = datos.getBytes();
  			  DatagramPacket dp = new DatagramPacket(respuesta, respuesta.length,
  					  solicitud.getAddress(), solicitud.getPort());
  			  dsocket.send(dp); 
    	  }catch(Exception e){
    		  System.out.println(e.getMessage());
    	  }
     }
}


